package session

import (
	"time"
)

type Session interface {
	// 生成会话 id
	generateId(id string, maxAge int)

	// 获取值
	Get(string) interface{}

	// 设置值
	Set(string, interface{})

	// 移除值
	Remove(string)

	// 获取id
	GetId() string

	// 判断是否实现
	IsExpire() bool

	// 更新最后访问时间
	updateLastTime()
}

//  默认存储内存中 ---------------------------------------------------------

//var mapSession = map[string]interface{}{}
//var lastTime = time.Now().Second()
//var createTime = time.Now().Second()

type SessionMomry struct {
	id string
	// 最大有效时间 单位秒
	maxAge     int
	lastTime   int
	createTime int
	mapSession map[string]interface{}
}

//生成id时为初始化，传入最大有效时间 单位秒
func (session *SessionMomry) generateId(id string, maxAge int) {
	if session.id != "" {
		// 已经初始化过了
		return
	}
	session.createTime = time.Now().Second()
	session.lastTime = time.Now().Second()
	session.id = id
	session.maxAge = maxAge
	// 初始化成员变量
	session.mapSession = map[string]interface{}{}
}

func (session *SessionMomry) Get(k string) interface{} {
	return session.mapSession[k]
}

func (session *SessionMomry) Set(k string, v interface{}) {
	session.mapSession[k] = v
}

func (session *SessionMomry) Remove(k string) {
	delete(session.mapSession, k)
}

func (session *SessionMomry) GetId() string {
	return session.id
}

// session 过期时返回 true
func (session *SessionMomry) IsExpire() bool {
	return time.Now().Second()-session.maxAge > session.lastTime
}

func (session *SessionMomry) updateLastTime() {
	session.lastTime = time.Now().Second()
}
